//
//  NSString+LP.m
//  LPQuestionBank
//
//  Created by 乐玑_李玉琴 on 2018/1/14.
//  Copyright © 2018年 LePoint. All rights reserved.
//

#import "NSString+LP.h"
#import <CommonCrypto/CommonDigest.h>

@implementation NSString (LP)

/**
 判断字符串是否为空
 
 @return 是否
 */
+ (BOOL)lp_isNullString:(NSString *)string {
    if (((![string isKindOfClass:[NSString class]])||[string isEqualToString:@""] || (string == nil) || [string isEqualToString:@""] || [string isKindOfClass:[NSNull class]]||[[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0 || [string isEqualToString:@"(null)"])) {
        return YES;
    }
    else {
        return NO;
    }
}


- (NSString *)lp_sha1 {
    if ([NSString lp_isNullString:self]) {
        return nil;
    }
    unsigned char digest[CC_SHA1_DIGEST_LENGTH], i;
    CC_SHA1([self UTF8String], (int)[self lengthOfBytesUsingEncoding:NSUTF8StringEncoding], digest);
    NSMutableString *ms = [NSMutableString string];
    for ( i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
        [ms appendFormat:@"%02x", (int)(digest[i])];
    }
    return [ms copy];
}

/**
 判断是否是手机号格式是否正确
 
 @param mobile 手机号
 @return BOOL
 */
+ (BOOL)lp_valiMobile:(NSString *)mobile {
    if (mobile.length < 11) {
        return NO;
    } else {
        /**
         * 移动号段正则表达式
         */
        NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
        /**
         * 联通号段正则表达式
         */
        NSString *CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(17[4-9])|(18[5,6]))\\d{8}|(1709)\\d{7}$";
        /**
         * 电信号段正则表达式
         */
        NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";
        NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];
        BOOL isMatch1 = [pred1 evaluateWithObject:mobile];
        NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
        BOOL isMatch2 = [pred2 evaluateWithObject:mobile];
        NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
        BOOL isMatch3 = [pred3 evaluateWithObject:mobile];
        
        if (isMatch1 || isMatch2 || isMatch3) {
            return YES;
        } else {
            return NO;
        }
    }
}

/**
 *    Trim the left and the right blank space
 *
 *    @return The new string without left and right blank space.
 */
- (NSString *)lp_trim {
    NSString *str = [self lp_trimLeft];
    return [str lp_trimRight];
}
- (NSString *)lp_trimLeft {
    NSInteger len = 0;
    
    while (len < self.length) {
        if ([self characterAtIndex:len] != ' ') {
            break;
        }
        
        len++;
    }
    
    if (len >= self.length) {
        len = self.length - 1;
    }
    
    if (len <= 0) {
        return self;
    }
    
    return [self substringFromIndex:len];
}

- (NSString *)lp_trimRight {
    NSInteger index = self.length - 1;
    for (NSInteger i = self.length - 1; i >= 0; --i) {
        if ([self characterAtIndex:i] != ' ') {
            break;
        } else {
            index--;
        }
    }
    
    if (index + 1 < self.length) {
        index++;
    }
    
    if (index + 1 >= self.length) {
        return self;
    }
    return [self substringToIndex:index];
}
@end
